package de.mnit.basis.swt.element.steuer.rollbar.gruppe;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DateTime;

import de.mnit.basis.daten.typ.zeit.Datum;
import de.mnit.basis.daten.typ.zeit.S_Datum;
import de.mnit.basis.daten.typ.zeit.S_Uhrzeit;
import de.mnit.basis.daten.typ.zeit.S_Zeitpunkt;
import de.mnit.basis.daten.typ.zeit.Uhrzeit;
import de.mnit.basis.daten.typ.zeit.Zeitpunkt;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.A_SWT_Gruppe;
import de.mnit.basis.sys.event.S_Zuhoerer;


/**
 * @author Michael Nitsche
 */
public class SWT_Kalender extends A_SWT_Gruppe<SWT_Kalender,DateTime> {

	public static void main(String[] args)   { start(new SWT_Kalender(),150,100); }


	public SWT_Kalender() {}


	public void sDatum(S_Datum datum) {
		swt().setYear(datum.gJahr());
		swt().setMonth(datum.gMonat()-1);
		swt().setDay(datum.gTag());
	}

	public void sZeit(S_Uhrzeit zeit) {
		swt().setHours(zeit.gStunden());
		swt().setMinutes(zeit.gMinuten());
		swt().setSeconds(zeit.gSekunden());
	}

	public void sZeitpunkt(S_Zeitpunkt zeit) {
		this.sDatum(zeit.gDatum());
		this.sZeit(zeit.gUhrzeit());
	}

	// LESEN

	public S_Datum gDatum() {
		return Datum.neu(swt().getYear(), swt().getMonth()+1, swt().getDay());
	}

	public S_Uhrzeit gZeit() {
		return Uhrzeit.neu(swt().getHours(), swt().getMinutes(), swt().getSeconds());
	}

	public S_Zeitpunkt gZeitpunkt() {
		return Zeitpunkt.neu(gDatum(), gZeit());
	}

	// EVENT

	public void eGeaendert(S_Zuhoerer<?> z) {
		this.zuhoererPlus("GEAENDERT", z);
	}

	// ERZEUGEN

	protected int style5() {
		return SWT.CALENDAR;  // SMALL / MEDIUM / LONG
	}

	protected DateTime roh(Composite basis, int style) {
		return new DateTime(basis,style);
	}

	protected void init5() {
		this.swt().addSelectionListener(new SelectionListener(){
			public void widgetDefaultSelected(SelectionEvent e)   {}
			public void widgetSelected(SelectionEvent e) {
				t.zuhoererStart("GEAENDERT", null);
			}
		});
		this.sZeitpunkt(Zeitpunkt.neu());
	}

}
